perm filename GEOM1[3,BGB] blob
sn#116882 filedate 1974-08-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 {⊂C<NF3αGEOMED.λ29P34JUFAI50,0}
C00007 00003
C00009 00004 {I100,0λ27} The sweep flag argument determines whether triangles (flag
C00013 ENDMK
C⊗;
{⊂C;<N;F3;αGEOMED.;λ29;P34;JUFA;I50,0;}
⊂3.2 Routines using Euler Primitives.⊃
Further methods of polyhedral construction can readily be
coded using the Euler primitives. For example, the routines listed in
Box 3.2 illustrate the direct generation of simple prototypical
polyhedra, as well as contruction by sweeping, cutting, glueing,
copying and duality.
{|;λ10;JAFA}
BOX 3.2 {JC} ROUTINES USING EULER PRIMITIVES.
1. BNEW ← MKCUBE(DX,DY,DZ); Create right rectangular prism.
2. BNEW ← MKCYLN(RADIUS,N,DZ); Create cylinder approximation.
3. BNEW ← MKBALL(RADIUS,M,N); Create sphere approximation.
4. FACE ← SWEEP(FACE,FLAG); Make prism on face (or sweep wire).
5. FACE ← ROTCOM(FACE); Rotation sweep wire face completion.
6. PEAK ← PYRAMID(FV); Make pyramid on a face (or vertex).
7. BODY ← GLUE(FACE1,FACE2); Removes face1 and face2.
8. BNEW ← MKCUT(BODY,X,Y,Z); Divide body at cutting plane.
9. QNEW ← MKCOPY(ENTITY); Copy an entity.
10. BODY ← FVDUAL(BODY); Apply face/vertex duality to a body.
{|;λ30;JU;FA}
The first three routines make cubic prisms as well as
polyhedral approximations to circular cylinders and spheres; or more
accurately, MKCUBE creates rectangular right prisms, MKCYLN
creates regular polygonal right cylinders and MKBALL creates hedrons
faceted by two N-sided regular polar polygons and N*(M-1)
trapezoidal polygons with all vertices lying on the surface of a
sphere of a given radius.
{I∂20,0;FCJC} FIGURE 3.4 - Examples of MKCUBE, MKCYLN and MKBALL.{H2;X0.41;FA;
I∂-20,0;⊗34.1;I∂0,∂420;⊗34.2;I∂0,∂420;⊗34.3;
I∂410,110;}MKCUBE Results{I∂0,530;}MKCYLN Results{
I∂0,950;}MKBALL Results{JUFA}
Although, the implementation of curved edges and curved faces in GEOMED
has always been <just around the corner>, I have balked at the idea
because it would require additional nodes connected to edges and
faces or it would require expanding the node size,
which I have always before taken as an omen for restarting
from scratch. There have so far been four cold starts: GEOMED I, 1969, was
based on sweep primitives and
was written in LEAP/SAIL; GEOMED II, 1970, was based on winged edge primitives
and was written SAIL without using LEAP; GEOMED III, 1971, was written SAIL and
FAIL; GEOMED IV, 1972 to present, is written in FAIL. Future
mythical GEOMED's include export GEOMED V, coded in simple
international ALGOL for export; a big GEOMED VI, larger nodes for
curved object representation of smooth manifolds rather than
polyhedra; a small GEOMED VII coded for a mini computer;
and finally a 4-D GEOMED VIII for four dimensional modeling.
{I∂-50,0;FCJC} FIGURE 3.5 - Creation of a Solid of Rotation by Sweeping a Wire.{H2;X0.41;FA;
I∂-20,0;⊗35.1;I∂0,∂420;⊗35.2;I∂0,∂420;⊗35.4;
I∂410,150;}Initial Wire{I∂0,510;}After four SWEEPs{
I∂0,950;}After ROTCOM{JUFA}
The three sweep primitives SWEEP, ROTCOM and PYRAMID involve
the non-solid Euler polyhedra: wire, lamina and sheets. A lone vertex
body can be swept into a wire, a wire can be closed to form a lamina
or a wire can be swept into a sheet, and a sheet can be closed to
form a solid polyhedron. Figure 3.5 illustrates the creation of a
solid by sweeping a wire-face, using SWEEP(FACE,0), to form a sheet. Figure
3.6 illustrates the creation of a solid by sweeping a normal face as
well as the use of the GLUE(FACE1,FACE2) primitive to close a torus.
{I∂20,0;FCJC} FIGURE 3.6 - Sweep and Glue.{H2;X0.41;FA;
I∂-20,0;⊗36.1;I∂0,∂420;⊗36.2;I∂0,∂420;⊗36.3;
I∂410,110;}Initial Face Lamina{I∂0,510;}After twelve SWEEPS{
I∂0,960;}After GLUE{JUFAQ}
{I100,0;λ27;} The sweep flag argument determines whether triangles (flag
non-zero) or rectangles (flag zero) are to be formed as the sweep of the
edges of the face. Sweeping out rectangles forms prisms, sweeping
out triangles forms prismoids. The PYRAMID routine when applied to a
face creates a peak vertex at the average locus of vertices of the face and
connects all the vertices of the given face to the peak vertex.
PYRAMID applied to a vertex coerces all the faces of the vertex to be
triangles, the interpretation being that the given vertex is to be
made like a peak of a pyramid. Prismoid sweep and face pyramiding are
illustrated by the construction of an icosahedron in Figure 3.7; the
icosahedron can be changed into a dodecahedron by the DUAL routine.
The DUAL routine mungs face nodes into vertex nodes and vertex
nodes into face nodes; the new vertices are placed at the arithmetic
mean of the vertices of the old faces, consequently the dual is not
its own inverse since objects tend to shrink.
{I∂15,0;λ7;FCJC} FIGURE 3.7 - ICOSAHEDRON BY PRISMOID SWEEP AND PYRAMID SWEEP.{H2;X.2051;
I∂-15,0;⊗37.1;I∂0,∂210;⊗37.2;I∂0,∂210;⊗37.3;
I∂0,∂210;⊗37.4;I∂0,∂210;⊗37.5;I∂0,∂210;⊗37.6;JUFA;λ27;I∂170,0;}
The MKCUT(BODY,X,Y,Z) primitive divides a body at cutting
plane into as many pieces as necessary. Figure 3.8 illustrates how to
cut a toroidal polyhedron into thirteen pieces using only three
cutting planes, after Figure 63 of (Gardner 61). The action of MKCOPY
should be obvious - a new polyhedron is returned that has the same
topology, geometry and photometry as the given polyhedron.
More routines using Euler primitives could be coded for particular
applications in architecture, computer animation, mechanical design, numerical
machine control, assembly diagraming and so on.{I∂20,0;
FCJC} FIGURE 3.8 - THREE CUT TORUS DISSECTION INTO THIRTEEN PARTS.{X0.41,0.39;H2;
I∂-35,0;⊗38.1;I∂0,∂420;⊗38.2;I∂0,∂420;⊗38.3;
I∂300,0;⊗38.4;I∂0,∂420;⊗38.5;I∂0,∂420;⊗38.6;JUFAλ30;}